const apiMethods = {
  methods: {
    apiGet(url, data) {
      return new Promise((resolve, reject) => {
        axios.get(url, data).then((response) => {
          resolve(response.data)
        }, (response) => {
          reject(response)
          _g.closeGlobalLoading()
          bus.$message({
            message: '请求超时，请检查网络',
            type: 'warning'
          })
        })
      })
    },
    apiPost(url, data) {
      return new Promise((resolve, reject) => {
        axios.post(url, data).then((response) => {
          resolve(response.data)
        }).catch((response) => {
          console.log('f', response)
          resolve(response)
          bus.$message({
            message: '请求超时，请检查网络',
            type: 'warning'
          })
        })
      })
    },
    apiDelete(url, id) {
      return new Promise((resolve, reject) => {
        axios.delete(url + id).then((response) => {
          resolve(response.data)
        }, (response) => {
          reject(response)
          _g.closeGlobalLoading()
          bus.$message({
            message: '请求超时，请检查网络',
            type: 'warning'
          })
        })
      })
    },
    checkList (data, arr) {
      // eslint-disable-next-line no-new-object
      let resultList = new Object()
      function test (type, str) {
        var reg = ''
        switch (type) {
          case 'issue':
            reg = /^\d+$/
            return reg.test(str) ? false : '期数只能是数字!'
          case 'idnumber':
            reg = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/
            return reg.test(str) ? false : '格式错误!'
          case 'name':
            reg = /[\u4e00-\u9fa5]/gm
            return reg.test(str) ? false : '用户名只能输入中文!'
          case 'info':
            reg = /[\u4e00-\u9fa5]/gm
            return reg.test(str) ? false : '只能输入中文!'
          case 'phone':
            reg = /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/
            return reg.test(str) ? false : '手机号码错误!'
          case 'nation':
            reg = /[\u4e00-\u9fa5]/
            return reg.test(str) ? false : '民族格式错误!'
          case 'postalcode':
            reg = /^[1-9]\d{5}(?!\d)$/
            return reg.test(str) ? false : '格式错误!'
          case 'email':
            reg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/
            return reg.test(str) ? false : '格式错误!'
          case 'office':
            reg = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/
            return reg.test(str) ? false : '格式错误!'
          case 'qq':
            reg = /^[0-9]{5,12}$/
            return reg.test(str) ? false : 'qq格式错误!'
          case 'fax':
            reg = /^(\d{3,4}-)?\d{7,8}$/
            return reg.test(str) ? false : '传真格式错误!'
          case 'code':
            reg = /^\d+$/
            return reg.test(str) ? false : '只能输入数字'
          case 'sex':
            reg = /^(男|女)$/
            return reg.test(str) ? false : '性别只能是男/女'
          case 'evaluate':
            reg = /^(?:\d?\d|100)$/
            return reg.test(str) ? false : '只能是1-100的数字'  
          default:
            return !str ? '不能为空' : false
        }
      }
      arr.forEach(function (arritem) {
        // 遍历每个需要核对的对象
        for (var i = 0, len = arritem.reg.length; i < len; i++) {
          // 对每个对象的每个reg规则进行核对
          // arritem.reg[i]是表单名称，data[arritem.name]是已经填好的内容
          var checkResult = test(arritem.reg[i], data[arritem.name])
          // console.log(checkResult)//输出的是上面reg验证时的不对信息(当信息输入都是对的时候，返回的是false。信息错误的时候，返回的是错误的原因)
          if (checkResult) {
            // 不符合规则,停止核对,并返回给相应的tips,以便检验
            if (data[arritem.name] === '' && arritem.reg[i] !== 'notnull') {
              // 如果这个值为空,且验证规则没有notnull,那么跳过判断
              break
            }
            // _g.toastMsg('error', checkResult)
            resultList[arritem.name + 'Tips'] = checkResult
            break
          } else {
            // 验证通过的时候 把相应的Tips重置
            resultList[arritem.name + 'Tips'] = ''
          }
        }
      })
      // 返回所有需要验证对象的验证结果的 与值
      // console.log(resultList)//结果是所有的arritem.name+'Tips':''，例如user_nicknameTips: ""
      let variable = ''
      for (variable in resultList) {
        if (!resultList[variable]) {
          delete resultList[variable]
        }
      }
      // console.log(_g.j2s(resultList) == '{}')
      return resultList
      // return arr.every(function (item) {
      //   return !resultList[item.name+'Tips']
      // })
    },
    apiPut(url, id, obj) {
      return new Promise((resolve, reject) => {
        axios.put(url + id, obj).then((response) => {
          resolve(response.data)
        }, (response) => {
          _g.closeGlobalLoading()
          bus.$message({
            message: '请求超时，请检查网络',
            type: 'warning'
          })
          reject(response)
        })
      })
    },
    handelResponse(res, cb, errCb) {
      _g.closeGlobalLoading()
      if (res.code == 200) {
        cb(res.data)
      } else {
        if (typeof errCb == 'function') {
          errCb()
        }
        this.handleError(res)
      }
    },
    handleError(res) {
      if (res.code) {
        switch (res.code) {
          case 101:
            console.log('cookie = ', Cookies.get('rememberPwd'))
            if (Cookies.get('rememberPwd')) {
              let data = {
                rememberKey: Lockr.get('rememberKey')
              }
              this.reAjax('admin/base/relogin', data).then((res) => {
                this.handelResponse(res, (data) => {
                  this.resetCommonData(data)
                })
              })
            } else {
              _g.toastMsg('error', res.error)
              setTimeout(() => {
                router.replace('/')
              }, 1500)
            }
            break
          case 103:
            _g.toastMsg('error', res.error)
            setTimeout(() => {
              router.replace('/')
            }, 1500)
            break
          // case 400:
          //   this.goback()
          //   break
          default :
            _g.toastMsg('error', res.error)
        }
      } else {
        console.log('default error')
      }
    },
    resetCommonData(data) {
      _(data.menusList).forEach((res, key) => {
        if (key == 0) {
          res.selected = true
        } else {
          res.selected = false
        }
      })
      Lockr.set('menus', data.menusList)              // 菜单数据
      Lockr.set('authKey', data.authKey)              // 权限认证
      Lockr.set('rememberKey', data.rememberKey)      // 记住密码的加密字符串
      Lockr.set('authList', data.authList)            // 权限节点列表
      Lockr.set('userInfo', data.userInfo)            // 用户信息
      Lockr.set('sessionId', data.sessionId)          // 用户sessionid
      window.axios.defaults.headers.authKey = Lockr.get('authKey')
      let routerUrl = '/home/index'
      // if (data.menusList[0].url) {
      //   routerUrl = data.menusList[0].url
      // } else {
      //   routerUrl = data.menusList[0].child[0].child[0].url
      // }
      setTimeout(() => {
        let path = this.$route.path
        if (routerUrl != path) {
          router.replace(routerUrl)
        } else {
          _g.shallowRefresh(this.$route.name)
        }
      }, 1000)
    },
    reAjax(url, data) {
      return new Promise((resolve, reject) => {
        axios.post(url, data).then((response) => {
          resolve(response.data)
        }, (response) => {
          reject(response)
          bus.$message({
            message: '请求超时，请检查网络',
            type: 'warning'
          })
        })
      })
    }
  },
  computed: {
    showLoading() {
      return store.state.globalLoading
    }
  }
}

export default apiMethods
